/**
 * PDA红外线扫码工具
 * 基于广播模式实现PDA红外扫描功能
 * 参考: https://blog.csdn.net/qq_58340302/article/details/133674254
 */

var main = ''
var filter = ''
var receiver = ''
var codeQueryTag = false
let scanSuccess = function(){} // 成功后的操作函数
let isReceiverRegistered = false // 标记receiver是否已注册
let currentPageName = '' // 当前激活的页面名称

/**
 * 初始化PDA扫描监听
 * @param {Function} successFun 扫描成功回调函数
 * @param {String} pageName 页面名称，用于识别当前页面
 */
export function initScan(successFun, pageName = '') {
  scanSuccess = successFun
  currentPageName = pageName
  console.log(`初始化PDA扫描监听 - 页面: ${pageName}`)
  
  // #ifdef APP-PLUS
  try {
    // 如果已经初始化过，只更新回调函数即可
    if (main && filter && receiver) {
      console.log('PDA扫描组件已初始化，只更新回调函数')
      return
    }
    
    main = plus.android.runtimeMainActivity() // 获取activity  
    var IntentFilter = plus.android.importClass('android.content.IntentFilter')
    filter = new IntentFilter()
    
    // 设置广播动作 - 需要与PDA设备配置对应
    filter.addAction("com.android.decodewedge.decode_action") // 换你的广播动作
    
    receiver = plus.android.implements('io.dcloud.android.content.BroadcastReceiver', {
      onReceive: function (context, intent) {
        plus.android.importClass(intent)
        // 获取扫描结果 - 需要与PDA设备配置对应
        let code = intent.getStringExtra("com.android.decode.intentwedge.barcode_string") // 换你的广播标签
        queryCurrenCode(code)
      }
    })
    
    console.log('PDA扫描监听初始化完成')
  } catch (error) {
    console.error('初始化PDA扫描失败:', error)
    uni.showToast({
      title: 'PDA扫描初始化失败',
      icon: 'none'
    })
  }
  // #endif
  
  // #ifndef APP-PLUS
  console.log('非APP环境，无法使用PDA扫描功能')
  // #endif
}

/**
 * 开启扫描监听
 * @param {String} pageName 页面名称，用于识别当前页面
 */
export function startScan(pageName = '') {
  // #ifdef APP-PLUS
  try {
    if (main && receiver && filter) {
      // 如果已经注册过，先注销再重新注册（避免重复注册）
      if (isReceiverRegistered) {
        try {
          main.unregisterReceiver(receiver)
          console.log('检测到重复注册，先注销旧的监听器')
        } catch (e) {
          // 忽略注销错误
        }
      }
      
      main.registerReceiver(receiver, filter)
      isReceiverRegistered = true
      currentPageName = pageName
      console.log(`PDA扫描监听已启动 - 页面: ${pageName}`)
    } else {
      console.error('PDA扫描组件未正确初始化')
    }
  } catch (error) {
    console.error('启动PDA扫描监听失败:', error)
    isReceiverRegistered = false
  }
  // #endif
}

/**
 * 关闭扫描监听
 * @param {String} pageName 页面名称，用于识别当前页面
 */
export function stopScan(pageName = '') {
  // #ifdef APP-PLUS
  try {
    if (main && receiver && filter && isReceiverRegistered) {
      main.unregisterReceiver(receiver)
      isReceiverRegistered = false
      console.log(`PDA扫描监听已停止 - 页面: ${pageName}`)
      
      // 清空回调函数，防止已停止的页面还能接收扫描结果
      if (currentPageName === pageName) {
        scanSuccess = function(){}
        currentPageName = ''
        console.log('清空回调函数')
      }
    }
  } catch (error) {
    console.error('停止PDA扫描监听失败:', error)
    isReceiverRegistered = false
  }
  // #endif
}

/**
 * 防止重复扫描的处理函数
 * @param {String} code 扫描到的条码
 */
async function queryCurrenCode(code) {
  // 防重复  
  if (codeQueryTag) return false
  codeQueryTag = true
  
  setTimeout(() => {
    codeQueryTag = false
  }, 150)
  
  console.log(`PDA扫描到条码: ${code} - 当前页面: ${currentPageName}`)
  
  // 调用成功回调函数
  if (scanSuccess && typeof scanSuccess === 'function') {
    scanSuccess(code)
  } else {
    console.warn('没有可用的扫描回调函数')
  }
}

/**
 * 检查PDA扫描功能是否可用
 * @returns {Boolean} 是否可用
 */
export function isPdaScanAvailable() {
  // #ifdef APP-PLUS
  return typeof plus !== 'undefined' && plus.android
  // #endif
  
  // #ifndef APP-PLUS
  return false
  // #endif
}

/**
 * 获取PDA设备信息
 * @returns {Object} 设备信息
 */
export function getPdaDeviceInfo() {
  // #ifdef APP-PLUS
  try {
    if (typeof plus !== 'undefined') {
      return {
        platform: plus.os.name,
        version: plus.os.version,
        vendor: plus.os.vendor,
        model: plus.os.model
      }
    }
  } catch (error) {
    console.error('获取PDA设备信息失败:', error)
  }
  // #endif
  
  return null
}
